<?php
namespace Client\Common;

define("TOKEN", "RD4KoqqrGgGCJTuK");
class EnterprisePayHelper
{
    protected static $url = '';
    
    //企业付款 -测试
    public function Pay($request_parameters, $key){
    
        //请求参数
        //mch_appid 公众账号appid
        //mchid  商户号 微信支付分配的商户号
        //device_info  设备号 微信支付分配的终端设备号 （可选）
        //nonce_str  随机字符串 随机字符串，不长于32位
        //sign 签名
        //partner_trade_no 商户订单号
        //openid 商户appid下，某用户的openid
        //check_name  NO_CHECK：不校验真实姓名      FORCE_CHECK：强校验真实姓名（未实名认证的用户会校验失败，无法转账） OPTION_CHECK：针对已实名认证的用户才校验真实姓名（未实名认证用户不校验，可以转账成功）
        //re_user_name 收款用户真实姓名。 如果check_name设置为FORCE_CHECK或OPTION_CHECK，则必填用户真实姓名
        //amount 企业付款金额，单位为分
        //desc 企业付款操作说明信息。必填。
        //spbill_create_ip 调用接口的机器Ip地址
        
        //签名
        $sign = $this->getSign($request_parameters, $key);
        
        $data="<xml>
                    <mch_appid>".$request_parameters['mch_appid']."</mch_appid>
                    <mchid>".$request_parameters['mchid']."</mchid>
                    <nonce_str>".$request_parameters['nonce_str']."</nonce_str>
                    <partner_trade_no>".$request_parameters['partner_trade_no']."</partner_trade_no>
                    <openid>".$request_parameters['openid']."</openid>
                    <check_name>".$request_parameters['check_name']."</check_name>
                    <re_user_name>".$request_parameters['re_user_name']."</re_user_name>
                    <amount>".$request_parameters['amount']."</amount>
                    <desc>".$request_parameters['desc']."</desc>
                    <spbill_create_ip>".$request_parameters['spbill_create_ip']."</spbill_create_ip>
                    <sign>".$sign."</sign>
               </xml>";
        
        $url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";
        
        return $this->httpRquest($url, $data);

    }
    
    //查询企业付款 -测试
    public function queryPay($request_parameters, $key){
        
        //nonce_str  随机字符串，不长于32位
        //sign
        //partner_trade_no 商户调用企业付款API时使用的商户订单号
        //mch_id 微信支付分配的商户号
        //appid 商户号的appid
        //
        
        //签名
        $sign = $this->getSign($request_parameters, $key);
        
        $data = "<xml>
                <sign>".$sign."</sign>
                <partner_trade_no>".$request_parameters['partner_trade_no']."</partner_trade_no>
                <mch_id >".$request_parameters['mchid']."</mch_id >
                <appid>".$request_parameters['appid']."</appid>
                <nonce_str>".$request_parameters['nonce_str']."</nonce_str>
                </xml>";
        
        $url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/gettransferinfo';
        return $this->httpRquest($url, $data);
    }
    
    /**
     * 	生成签名
     */
    function getSign($data, $key){
        foreach ($data as $k => $v){
            $parameters[$k] = $v;
        }
        //签名步骤一：按字典序排序参数
        ksort($parameters);
        $string = $this->formatBizQueryParaMap($parameters, false);
        //签名步骤二：在string后加入KEY
        $string = $string."&key=$key";
        //签名步骤三：MD5加密
        $string = md5($string);
        //签名步骤四：所有字符转为大写
        $result = strtoupper($string);
        return $result;
    }
    
    
    /**
     * 	格式化参数，签名过程需要使用
     */
    function formatBizQueryParaMap($paraMap, $urlencode){
        $buff = "";
        ksort($paraMap);
        foreach ($paraMap as $k => $v){
            if($urlencode){
                $v = urlencode($v);
            }
            //$buff .= strtolower($k) . "=" . $v . "&";
            $buff .= $k . "=" . $v . "&";
        }
        
        $reqPar = '';
        if(strlen($buff) > 0){
            $reqPar = substr($buff, 0, strlen($buff)-1);
        }
        return $reqPar;
    }
    
    function httpRquest($url, $data){
        $ch = curl_init ();
        curl_setopt ( $ch, CURLOPT_URL, $url );
        curl_setopt ( $ch, CURLOPT_CUSTOMREQUEST, "POST" );
        curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, FALSE );
        curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, FALSE );
        
        $file_dir = str_replace(substr($_SERVER['DOCUMENT_ROOT'],-6) , '', $_SERVER['DOCUMENT_ROOT']);
        
        $cert = $file_dir."/config/wechatepay/apiclient_cert.pem";
        $key = $file_dir."/config/wechatepay/apiclient_key.pem";
        curl_setopt($ch,CURLOPT_SSLCERT,$cert);
        curl_setopt($ch,CURLOPT_SSLKEY,$key);
        // curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01;
        // Windows NT 5.0)');
        curl_setopt ( $ch, CURLOPT_FOLLOWLOCATION, 1 );
        curl_setopt ( $ch, CURLOPT_AUTOREFERER, 1 );
        curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data );
        curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
        
        $info = curl_exec ($ch);
        
        if(curl_errno ($ch)){
            return 'Errno' . curl_error ($ch);
        }
        
        curl_close ($ch);
        return $info;
    }
    
}